NOTE

6.2 Linux cgroup

1. Linux cgroup历史 - Google的工程师开发了process containers,之后重命名为control group - Linux 内核 2.6版本支持了cgroup 2. 什么是Linux cgroup limits how much you can use Linux

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. Linux cgroup历史

  • Google的工程师开发了process containers,之后重命名为control group
  • Linux 内核 2.6版本支持了cgroup

2. 什么是Linux cgroup

2026 注:本文记录的是较早期的 cgroup 使用方式;现代 Linux 发行版普遍以 cgroup v2 为主。 limits how much you can use Linux内核的一种特性,限制进程的资源使用。这些资源包括CPU、内存、磁盘IO、网络等

3. 为什么需要Linux cgroup

通过限制资源的使用率从而支持虚拟化,比如容器技术

4. 如何使用Linux cgroup

cgroup给用户暴露的接口是操作系统文件,位于/sys/fs/cgroup

4.1. 查看进程所属的 cgroups

/proc/[pid]/cgroup

4.2. 限制进程可用的CPU

  1. 创建控制组
cd  /sys/fs/cgroup/cpu
mkdir container
ls container/
cgroup.clone_children cpu.cfs_period_us cpu.rt_period_us  cpu.shares notify_on_release
cgroup.procs      cpu.cfs_quota_us  cpu.rt_runtime_us cpu.stat  tasks
  1. 写一个死循环的程序并运行
while : ; do : ; done &
[1] 226
  1. 配置CPU子系统:每100 ms的时间里,被该控制组限制的进程只能使用20 ms的CPU时间,也就是说这个进程只能使用到20%的CPU带宽
echo 100000 > container/cpu.cfs_period_us
echo 20000 > container/cpu.cfs_quota_us
  1. cgroup限制task
echo 226 > /sys/fs/cgroup/cpu/container/tasks
# 或者
cgexec -g cpu:container ./需要限制的程序
  1. 使用top或者time命令验证

5. Linux cgroup缺点

5.1. /proc

Linux下的/proc目录存储的是记录当前内核运行状态的一系列特殊文件,用户可以通过访问这些文件,查看系统以及当前正在运行的进程的信息,比如CPU使用情况、内存占用率等,这些文件也是top指令查看系统信息的主要数据来源。

但是,你如果在容器里执行top指令,就会发现,它显示的信息居然是宿主机的CPU和内存数据,而不是当前容器的数据。

造成这个问题的原因就是,/proc文件系统并不知道用户通过Cgroups给这个容器做了什么样的资源限制,即:/proc文件系统不了解Cgroups限制的存在

6. Linux cgroup原理

7. 参考